From a0e68bec52f8da37facc74683e7e0b9a3eef3c21 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Tue, 29 Jan 2013 14:08:47 +0100 Subject: [PATCH] gtk-demo: Load the demo files using g_file_get_contents() ... instead of massaging a FILE* with flockfile() and ungetc(). --- config.h.win32.in | 6 --- configure.ac | 2 +- demos/gtk-demo/main.c | 95 +++++++++---------------------------------- 3 files changed, 21 insertions(+), 82 deletions(-) diff --git a/config.h.win32.in b/config.h.win32.in index d5c2ad3667..ddb9d75a83 100644 --- a/config.h.win32.in +++ b/config.h.win32.in @@ -50,15 +50,9 @@ /* Define to 1 if you have the header file. */ /* #undef HAVE_DLFCN_H */ -/* Define to 1 if you have the `flockfile' function. */ -/* #undef HAVE_FLOCKFILE */ - /* Define to 1 if you have the header file. */ /* #undef HAVE_FTW_H */ -/* Define to 1 if you have the `getc_unlocked' function. */ -/* #undef HAVE_GETC_UNLOCKED */ - /* Define to 1 if you have the `getpagesize' function. */ #ifndef _MSC_VER #define HAVE_GETPAGESIZE 1 diff --git a/configure.ac b/configure.ac index 6908f896a0..6ccae17a90 100644 --- a/configure.ac +++ b/configure.ac @@ -560,7 +560,7 @@ if test "x$enable_rebuilds" = "xyes" && \ fi AC_SUBST(REBUILD) -AC_CHECK_FUNCS(lstat mkstemp flockfile getc_unlocked) +AC_CHECK_FUNCS(lstat mkstemp) AC_CHECK_FUNCS(localtime_r) # _NL_TIME_FIRST_WEEKDAY is an enum and not a define diff --git a/demos/gtk-demo/main.c b/demos/gtk-demo/main.c index 935b86eeff..1b58b15ee2 100644 --- a/demos/gtk-demo/main.c +++ b/demos/gtk-demo/main.c @@ -110,65 +110,6 @@ window_closed_cb (GtkWidget *window, gpointer data) g_free (cbdata); } -gboolean -read_line (FILE *stream, GString *str) -{ - int n_read = 0; - -#ifdef HAVE_FLOCKFILE - flockfile (stream); -#endif - - g_string_truncate (str, 0); - - while (1) - { - int c; - -#ifdef HAVE_FLOCKFILE - c = getc_unlocked (stream); -#else - c = getc (stream); -#endif - - if (c == EOF) - goto done; - else - n_read++; - - switch (c) - { - case '\r': - case '\n': - { -#ifdef HAVE_FLOCKFILE - int next_c = getc_unlocked (stream); -#else - int next_c = getc (stream); -#endif - - if (!(next_c == EOF || - (c == '\r' && next_c == '\n') || - (c == '\n' && next_c == '\r'))) - ungetc (next_c, stream); - - goto done; - } - default: - g_string_append_c (str, c); - } - } - - done: - -#ifdef HAVE_FLOCKFILE - funlockfile (stream); -#endif - - return n_read > 0; -} - - /* Stupid syntax highlighting. * * No regex was used in the making of this highlighting. @@ -559,14 +500,13 @@ remove_data_tabs (void) void load_file (const gchar *filename) { - FILE *file; GtkTextIter start, end; char *full_filename; GError *err = NULL; - GString *buffer = g_string_new (NULL); int state = 0; gboolean in_para = 0; - gchar **names; + gchar **names, **lines; + gchar *contents; gint i; remove_data_tabs (); @@ -598,23 +538,30 @@ load_file (const gchar *filename) goto out; } - file = g_fopen (full_filename, "r"); - - if (!file) - g_warning ("Cannot open %s: %s\n", full_filename, g_strerror (errno)); + if (!g_file_get_contents (full_filename, &contents, NULL, &err)) + { + g_warning ("Cannot open %s: %s\n", full_filename, err->message); + g_error_free (err); + g_free (full_filename); + goto out; + } g_free (full_filename); - if (!file) - goto out; + lines = g_strsplit (contents, "\n", -1); + g_free (contents); gtk_text_buffer_get_iter_at_offset (info_buffer, &start, 0); - while (read_line (file, buffer)) + for (i = 0; lines[i] != NULL; i++) { - gchar *p = buffer->str; + gchar *p; gchar *q; gchar *r; + /* Make sure \r is stripped at the end for the poor windows people */ + lines[i] = g_strchomp (lines[i]); + + p = lines[i]; switch (state) { case 0: @@ -703,7 +650,7 @@ load_file (const gchar *filename) p++; if (*p) { - p = buffer->str; + p = lines[i]; state++; /* Fall through */ } @@ -718,13 +665,11 @@ load_file (const gchar *filename) } } - fclose (file); - fontify (); -out: - g_string_free (buffer, TRUE); + g_strfreev (lines); +out: g_strfreev (names); } -- 2.30.2